package com.shiqla.amqp.client;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.shiqla.amqp.comm.ProUtils;

import java.io.IOException;
import java.util.Queue;
import java.util.concurrent.TimeoutException;

/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃  神兽保佑
 * 　　　　┃　　　┃  代码无bug
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 * Desc ${DESC}
 * Auth Administrator
 * Date 2018/7/12/012
 */
public class SenderClient {

    private static String QueueNAME = "hello";

    private static String QueueNAME1 = "hello1";

    private static String QueueNAME2 = "hello2";


    public static void main(String[] args) throws IOException, TimeoutException {

        //构建链接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();

        connectionFactory.setHost(ProUtils.getInstance().getProperties("amqp.host"));
        connectionFactory.setPort(Integer.valueOf(ProUtils.getInstance().getProperties("amqp.port")));
        connectionFactory.setUsername(ProUtils.getInstance().getProperties("amqp.username"));
        connectionFactory.setPassword(ProUtils.getInstance().getProperties("amqp.password"));

        //通过连接工厂链接到rabbitmq 服务器
        Connection connection = connectionFactory.newConnection();
        //链接之后创见一个消息通道
        Channel channel = connection.createChannel();

        //在消息通道上声明一个名称由queue_name指定的消息队列

        channel.queueDeclare(QueueNAME, false, false, false, null);
        channel.queueDeclare(QueueNAME1, false, false, false, null);
        channel.queueDeclare(QueueNAME2, false, false, false, null);

        String sendMessage = "hello rabbitmq by shiqla";

        //使用消息通道将需要发送的消息推送到消息队列里面

        //使用消息通道构建一个topic 类型的交换机
        channel.exchangeDeclare("topicExchange1","topic");

        //将队列和交换机绑定,同时指定路由key 为topic.message;
        channel.queueBind(QueueNAME1,"topicExchange1","topic.message");

        for (int i = 0; i < 10; i++) {
            channel.basicPublish("", QueueNAME, null, sendMessage.getBytes());
        }


        //使用交换机topicExchange1 通过路由topic.message 发送数据到队列
        channel.basicPublish("topicExchange1","topic.message",null,sendMessage.getBytes());

        channel.close();
        connection.close();

    }
}
